//变量的声明
//js基本数据类型：number string null undefined boolean symbol
//js引用数据类型：array object

//ts 类型：any 任意类型  tuple元组  void
let str:string = 'helllo';

str = '123';

console.log(str);

let num:number = 123;

num = 12.00;

num = 0.1;

//联合声明

//管道符
let shouzhuo:null|string = null;

shouzhuo = 'zss';

//类型推断
let name1 = 'lili';

// name1 = true;


let isLogin:boolean = true;

// isLogin = '12'


let param:any = 1;

param = 'aa';

param = true;

//数组

/**
 * 语法一：let 变量名:类型[] = []
 * 
 * 语法二：let 变量名:Array<类型> = [];
 * 
*/

// let arr:string[] = ['70以下','70~80','81~90','91~100'];

let score:number[] = [70,80,60];

let arr:Array<string> =  ['70以下','70~80','81~90','91~100'];

let arr1:any[] = [1,'sss',true]; //数组内放置任意类型

//元组：一种特殊的数组，它规定了数组每一项的类型

let arr2:[string,boolean,null] = ['hello',true,null]

//enum 枚举

/**
 * 语法：
 * 
 * enum 枚举名{ //必须首字母大写
 *      属性名=值
 *      ...
 * }
 * 
 * 注：属性没值，就取下标的值
 * 
*/

enum Role{
    teacher=1,
    xuewei=2,
    student=3
}

console.log(Role.xuewei);

enum Sex{
    girl,
    boy,
    unkown
}

console.log(Sex.girl) //0

//void 没有返回值  一般用在函数没有返回值

// function sum(a:number,b:number):number{
//     return a+b
// }

// sum(1,2);

function sum(str:string,...nums:Array<number>):string{
    let total = nums.reduce((prev:number,cur:number) => {
        return prev+cur
    })
    return `${str},${total}`
}

console.log(sum('总合',1,2,3))

function login():void{
    //登录功能，不需要返回值
}

//never:永远不会结束的类型
function fun():never{
    while(true){

    }
}

//请求分页的数据

//函数的可选参数
function getList(pagenum:number=1,limit?:number){

}

getList();

//类型断言

/**
 * 第一种：(变量名 as 数据类型)  常用
 * 第二种：(<数据类型>变量名)
 * 
*/

let test:any = 'hello';

let str1:string = (test as string).substr(0,1)

let str2:string = (<string>test).substr(1,2);